package com.mcxx.modules.common.service.impl;

import com.mcxx.modules.common.service.StatisticService;
import com.mcxx.modules.statistics.dto.SubRevealDTO;
import com.mcxx.modules.statistics.dto.StatisticDTO;
import com.mcxx.modules.statistics.param.StatisticParam;
import com.mcxx.modules.statistics.service.read.StatisticReadService;
import com.mcxx.modules.system.entity.AreaSalvationEntity;
import com.mcxx.util.AreaUtil;
import com.mcxx.util.Constant;
import com.yinhai.ta404.component.org.orguser.area.entity.TaAreaPo;
import com.yinhai.ta404.core.security.vo.UserAccountVo;
import com.yinhai.ta404.core.transaction.annotation.TaTransactional;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;


@Slf4j
@Service
@TaTransactional
public class StatisticSubRevealServiceImpl extends StatisticService{
    @Autowired
    private AreaUtil areaUtil;
    @Autowired
    private StatisticReadService statisticReadService;

    @Override
    public List<? extends StatisticDTO> getStatistic(StatisticParam param, UserAccountVo accountVo, String standType) {
        List<TaAreaPo> taAreaPos = new ArrayList<TaAreaPo>();
        List<Integer> levels = new ArrayList<Integer>();
        String name = super.commonStatisticStart(param, accountVo, taAreaPos, levels);

        List<String> standards = new ArrayList<String>();
        standards.add(standType);

        List<SubRevealDTO> results = null;
        if(standType.equals(Constant.BusinessStandType.CITY_DIBAO)) {
            name += "城市低保兜底脱贫统计表";
            results = statisticReadService.getCitySubReveal(
                    areaUtil.getValidCode(taAreaPos.get(0).getAreaCode(), taAreaPos.get(0).getAreaLevel()),
                    levels, param.getMonth());
        }
        else{
            name += "农村低保兜底脱贫统计表";
            results = statisticReadService.getCountrySubReveal(
                    areaUtil.getValidCode(taAreaPos.get(0).getAreaCode(), taAreaPos.get(0).getAreaLevel()),
                    levels, param.getMonth());
        }

        super.commonStatisticEnd(name, standards, taAreaPos, levels, results);
        return results;
    }

    @Override
    public void fillSalvation(StatisticDTO dto, List<String> standards, List<AreaSalvationEntity> salivations) {
        ((SubRevealDTO)dto).setStandard(salivations.get(0).getStandardMoney());
    }
}
